//shopcart模块的小仓库
import {
  reqCartList,
  reqDeleteCartById,
  reqUpdateCheckedById
} from '@/api'
// actions 处理异步，接受服务器端的数据
const actions = {
  async getCartList(context, value) {
    let result = await reqCartList()
    // console.log(result);
    if (result.code == 200) {
      context.commit('GETCARTLIST', result.data)
    }
  },
  // 服务器删除数据成功，删除加入购物车并不需要返回其他数据，所以只是返回code=200，代表本次成功
  // 删除商品
  async deleteCartListBySkuId(context, skuId) {
    let result = await reqDeleteCartById(skuId)
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 删除选中商品
  deleteAllCheckedCart({
    dispatch,
    getters
  }) {
    let PromiseAll = []
    getters.cartList.cartInfoList.forEach(element => {
      let promise = element.isChecked == 1 ? dispatch('deleteCartListBySkuId', element.skuId) : ''
      PromiseAll.push(promise)
    });
    //  如果每一次返回的promise都成就成
    return Promise.all(PromiseAll)
  },
  // 告诉服务器说要修改isChecked的状态 skuId,isChecked
  async UpdateCheckedById(context, {
    skuId,
    isChecked
  }) {
    let result = await reqUpdateCheckedById(skuId, isChecked)
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 告诉服务器说要修改全部产品的isChecked的状态 isChecked
  updateAllCartChecked({
    dispatch,
    state
  }, isChecked) {
    let promiseAll = []
    state.cartList[0].cartInfoList.forEach(element => {
      let promise = dispatch('UpdateCheckedById', {
        skuId: element.skuId,
        isChecked
      })
      promiseAll.push(promise)
    })
    return Promise.all(promiseAll)
  }
}
//mutations 修改state的唯一方法
const mutations = {
  GETCARTLIST(state, cartList) {
    state.cartList = cartList
  }
}
//state仓库存储数据
const state = {
  cartList: []
}
// getters 计算属性，组件获取仓库的数据更加方便
const getters = {
  cartList(state) {
    return state.cartList[0] || {}
  },
}
export default {
  state,
  actions,
  mutations,
  getters,
};